除了前幾天介紹幾個比較基本的CRUD功能,PostgreSQL也有提供Aggregate Function,讓使用者可以對資料做一些運算,結合分群的功能,也能夠統計一些數據。舉例來說,如果我們想要知道 address 這張table有多少筆資料,可以用 count() 加總。
SELECT count(*) FROM address
如果想要統計有多少筆地址分布在各個城市,可以用 GROUP BY 並搭配 count() 做加總,還可以使用 max() 找出地址的最後更新時間。
SELECT address.city_id, count(*), max(address.last_update) FROM address
GROUP BY address.city_id

此外,還可以用 FILTER 下條件,過濾不要統計哪些資料,舉例來說,我們想要排除沒有電話號碼的地址,可以在 count(*) 後面加上 FILTER(WHERE phone != '') 。
SELECT address.city_id, count(*) FILTER(WHERE phone != ''), max(address.last_update) FROM address
GROUP BY address.city_id
用 city_id = 576 做驗證,有加上 FILTER(WHERE phone != '') , count(*) 統計出來只有一筆資料。
沒有加上條件,會有兩筆資料。